package main

import (
	"fmt"
	"gofirst/ch03datatype/operator"
	"math"
	"reflect"
	"unsafe"
)

func printBool() {
	fmt.Println("测试bool: ")
	//定义bool数据类型
	var gender bool = true
	fmt.Println(gender)
}

func printInt() {
	fmt.Println("测试int: ")
	//相比python而言，go语言为什么有这么多种数据类型？
	//年龄，分数这种都是有上限的，年龄0-200，分数0-150
	//很多场景下，数字有上限，我们可以选择合适的数据类型，来降低内存的占用
	var age uint8
	age = 18
	fmt.Println(age)

	//int是一种动态类型，取决于机器本身是多少位，64为机器上，int等价与int64;32位机器上，int等价于int32，一般情况下，不用int，都会使用表明位数的数据类型
	var score uint = 123
	fmt.Println(unsafe.Sizeof(score)) //返回值是几个字节

	grade := 5
	fmt.Print("go默认为整型数据选用的数据类型：")
	fmt.Printf("%T\n", grade)
}

func printByteAndRune() {
	fmt.Println("测试byte and rune: ")
	//byte
	var a byte = 18
	fmt.Println(a)
	//静态语言中，中文处理很容易出错，一般用rune处理
}

func printFloat() {
	fmt.Println("测试float: ")

	var weight float32 = 71.2
	fmt.Println(weight)
	fmt.Println(math.MaxFloat32)
	fmt.Println(math.MaxFloat64)
	fmt.Println(math.MaxInt64)
	//为什么64位的float最大值远大于int64,float底层存储和int的存储不一样
	//float32和float64两者占用的内存不一样，64位的最大数和精度都比32位高

	heigt := 176.5
	fmt.Print("go默认为浮点型数据选用的数据类型：")
	fmt.Printf("%T\n", heigt)
}

func printChar() {

	fmt.Println("测试char: ")
	var a byte
	a = 'a'
	//输出ascii对应码值 。。 这里说明一下什么是ascii码
	fmt.Println(a)
	fmt.Printf("a=%c \n", a)
	fmt.Println(reflect.TypeOf(a))
	fmt.Printf("a+1=%c \n", a+1)

}

func main() {
	////bool数据类型
	//printBool()
	////int类型
	//printInt()
	////float
	//printFloat()
	////byte and rune
	//printByteAndRune()
	////char
	//printChar()
	//
	////1.基本类型的数据转换
	//varconvert.ConvertDataTypeBasic()
	//// 简单的数据类型转换
	//varconvert.ConvertDataTypeSimple()
	////strconv
	//varconvert.ConvertDataTypeByStrconv()

	//运算符
	operator.MathOperator()

	operator.LogicOperator()
}
